/**
 * 
 */
package com.terrence.log;

/**
 * @author wuchuang
 *
 * 2016年9月14日 上午10:18:09
 * 
 * 日志抽象类
 */
public abstract class AbsLogger implements ILogger {
	
	private Integer logLevelCode;

	@Override
	public void debug(Object debug,ILogHandler handler) throws LogException{
		if(LogLevel.DEBUG.is(getLogLevelCode())){
			checkLogHandler(handler);
			handler.before(debug,null);
			handler.handle(debug, null);
			handler.after(debug, null);
		}
	};

	@Override
	public void info(Object info,ILogHandler handler) throws LogException{
		if(LogLevel.INFO.is(getLogLevelCode())){
			checkLogHandler(handler);
			handler.before(info,null);
			handler.handle(info, null);
			handler.after(info, null);
		}
	}

	@Override
	public void error(Object error, Throwable cause,ILogHandler handler) throws LogException{
		if(LogLevel.ERROR.is(getLogLevelCode())){
			checkLogHandler(handler);
			handler.before(error,cause);
			handler.handle(error, cause);
			handler.after(error, cause);
		}
	}
	
	/**
	 * 检查日志处理器是否为NULL
	 * @param handler
	 * @return
	 * @throws LogException
	 */
	private void checkLogHandler(ILogHandler handler) throws LogException{
		if(null == handler){
			throw new LogException("日志处理器不能为NULL!");
		}
	}

	private Integer getLogLevelCode() {
		return logLevelCode;
	}

	public void setLogLevelCode(Integer logLevelCode) {
		this.logLevelCode = logLevelCode;
	}
}
